package gconfig

import (
	"fmt"
	"gopkg.in/yaml.v2"
	"io/ioutil"
	"message-center/pkg/gutil/gconver"
	"os"
)

var cfgData map[string]interface{}

func initCfg(path string) {
	bytes, err := ioutil.ReadFile(path)
	if err != nil {
		fmt.Println("ReadFile: ", err.Error())
		os.Exit(-1)
	}

	if err := yaml.Unmarshal(bytes, &cfgData); err != nil {
		fmt.Println("invalid config: ", err.Error())
		os.Exit(-1)
	}
}

var DBConfig dBConfig
var RedisConfig redisConfig
var MongoConfig mongoConfig
var MailConfig mailConfig
var AliyunConfig aliyunConfig

func initDB() {
	gconver.MapToStruct(&DBConfig, cfgData["db"].(map[interface{}]interface{}))
}

func initRedis() {
	gconver.MapToStruct(&RedisConfig, cfgData["redis"].(map[interface{}]interface{}))
}

func initMongo() {
	gconver.MapToStruct(&MongoConfig, cfgData["mongodb"].(map[interface{}]interface{}))
}

func initMail() {
	gconver.MapToStruct(&MailConfig, cfgData["mail"].(map[interface{}]interface{}))
}

func initAliyun() {
	gconver.MapToStruct(&AliyunConfig, cfgData["aliyun"].(map[interface{}]interface{}))
}

func Init() {
	initCfg("./config/config.yaml")
	initDB()
	initRedis()
	initMongo()
	initMail()
	initAliyun()
}
